#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
@File    :  get_CPUtemp.py
@Time    :  2022/04/30 16:37:18
@Author  :  HHLiang
@Contact :  sternapeg@qq.com
@Version :  1.0
@Desc    :  获取温度，上传到OneNET平台
'''

import json
import time
import threading

import requests

from config import config_run
from get_temp.pyTherm import main


# 从 config.py 文件中获取 APIKEY、device_id 和 datastream_id。
config = config_run()
# print(config)
APIKEY = config[0]
device_id = config[1]
datastream_id = config[2]


def get_CPU_Temp():
    """
    它返回当前时间和当前 CPU 温度的元组
    :return: 包含当前时间和 CPU 温度的元组。
    """

    get_temps = main()
    cpu_temp = json.loads(get_temps)
    # cpu_temp = cpu_temp['HHL-PRESONAL'][-2]['Reading'][:-2]  # 需要个人依据自己电脑情况自行修改。

    pc_name = 'HHL-OWNER' # 需要个人依据自己电脑名称情况自行修改。
    # print('11111111111------------',cpu_temp[pc_name][-2]['Reading'][:-2])
    cpu_temp = cpu_temp[pc_name][-2]['Reading'][:-2] # 需要个人依据自己电脑名称情况自行修改。
    # print('222222222------------',cpu_temp)

    cpu_temp = float(cpu_temp)  # 字符串转为浮点数
    localtime = time.strftime("%Y-%m-%dT%H:%M:%S", time.localtime())

    return(localtime, cpu_temp)


def post_datapoints(localtime, cpu_temp):
    """
    它需要两个参数，本地时间和 CPU 温度，然后将数据上传到 OneNet 云

    :param localtime: 当前时间戳
    :param cpu_temp: CPU的温度
    :return: 来自服务器的响应。
    """

    dict = {
        "datastreams": [
            {
                "id": "CPUtemp",
                "datapoints": [
                    {
                        "at": localtime,
                        "value": cpu_temp
                    }
                ]
            }
        ]
    }

    data = json.dumps(dict)
    url = ('http://api.heclouds.com/devices/' + device_id + '/datapoints')
    # 生成指定格式的header
    headers = {
        "api-key": APIKEY
    }
    # 采用HTTP协议上传数据
    response = requests.post(url, headers=headers, data=data)
    header = response.headers
    text = response.text

    # return(header, text)
    return(text)


def time_handler():
    """
    该函数每2秒调用一次，获取CPU温度，并将数据上传到OneNET平台
    """

    print("获取电脑CPU温度!")
    temp = get_CPU_Temp()
    # print('1111-----',temp)
    localtime = temp[0]
    cpu_temp = temp[1]
    print(localtime, "CPU温度:" + str(cpu_temp) + "°C")

    print("开始上传数据！")
    r = post_datapoints(localtime, cpu_temp)

    a = json.loads(r)
    i = a['errno']
    if i == 0:
        print("数据上传成功！\t")
    else:
        print("数据上传失败！\t")
        print("错误信息：" + r)
    print("*********结束*********\n")
    global timer
    timer = threading.Timer(2, time_handler)  # 该处设置延时时间
    timer.start()


if __name__ == "__main__":
    time_handler()
